package com.raft.core.node.task;

import com.raft.core.node.NodeEndpoint;

/**涉及上下文的主要目的是，把catch-up中涉及日志组件、核心组件状态的操作从catch-up任务中剥离出来，让任务专注于自己内部的状态数据
 * <br/>Task context for {@link NewNodeCatchUpTask}.
 */
public interface NewNodeCatchUpTaskContext {

    /**复制日志，主线程任务中执行
     * <br/>Replicate log to new node.
     * <p>
     * Process will be run in node task executor.
     * </p>
     *
     * @param endpoint endpoint
     */
    void replicateLog(NodeEndpoint endpoint);

    /**复制日志
     * <br/>Replicate log to endpoint.
     *
     * @param endpoint  endpoint
     * @param nextIndex next index
     */
    void doReplicateLog(NodeEndpoint endpoint, int nextIndex);

    /**发送日志快照安装消息
     * @param endpoint
     * @param offset
     */
    void sendInstallSnapshot(NodeEndpoint endpoint, int offset);

    /**任务完成(失败也算)
     * <br/>Done and remove current task.
     *
     * @param task task
     */
    void done(NewNodeCatchUpTask task);

}
